#include "regmod_analisis_det.h"
#include "ui_regmod_analisis_det.h"

Regmod_Analisis_det::Regmod_Analisis_det(QWidget *parent, Analisis *anal) :
    QDialog(parent),
    ui(new Ui::Regmod_Analisis_det)
{
    ui->setupUi(this);
    ui->id_analisis->setVisible(false);

    this->setWindowFlags(Qt::Tool);
    this->setGeometry(QStyle::alignedRect(Qt::LeftToRight, Qt::AlignCenter, this->size(), qApp->desktop()->availableGeometry()));
    band = false;

    //***Validaciones**//
    validatorS = new QRegExpValidator(QRegExp("[^0-9]{40}"),this);
    ui->nombre_analisis->setValidator(validatorS);
    validatorN = new QIntValidator(1, 99999999);

    ui->listAnalisisDet->setAlternatingRowColors(true);
    ui->listDeterminaciones->setAlternatingRowColors(true);

    QDjango::setDebugEnabled(true);
    if(determinaciones.count() > 0)
        foreach (const Determinacion &det, determinaciones) {ui->listDeterminaciones->addItem(det.getNombre());}

    if(departamentos.count() > 0)
        foreach (const Departamento &depto, departamentos) {ui->comboBox_departamento->addItem(depto.getNombre_departamento());}


    listaAnalisis_det = new QStringList();
    listaDet          = new QStringList();

    QSqlQuery query;
    query.exec("select distinct determinacion.nombre from determinacion,ana_det where ana_det.determinacion_id = determinacion.id_determinacion;");
    QString nombre;

    while (query.next())
    {
        nombre = query.value(0).toString();
        listaDet->append(nombre);
    }

    if (anal != NULL)
    {

        this->setWindowTitle("Modificar Análisis");
        ui->id_analisis->setText(QString::number(anal->getId_analisis()));
        ui->nombre_analisis->setText(anal->getNombre());
        ui->tipo_analisis->setText(anal->getTipo_analisis());
        ui->descripcion_analisis->append(anal->getDescripcion());
        ui->comboBox_departamento->setCurrentText(anal->getDepartamento()->getNombre_departamento());

        for (int i = 0; i < listaDet->count(); i++)
        {
           ui->listAnalisisDet->addItem(listaDet->at(i));

           if(!listaAnalisis_det->contains(listaDet->at(i))){
               listaAnalisis_det->append(listaDet->at(i));
           }
        }

    }
    else
    {
        this->setWindowTitle("Registrar Análisis");
    }
}

Regmod_Analisis_det::~Regmod_Analisis_det()
{
    delete ui;
}

void Regmod_Analisis_det::on_boton_aceptar_clicked()
{

    if(ui->nombre_analisis->text().simplified() == "" || ui->listAnalisisDet->count() == 0){

        if (ui->nombre_analisis->text().simplified() == ""){

                ui->nombre_analisis->setFocus();
                QToolTip::showText(ui->nombre_analisis->mapToGlobal(QPoint(10,8)), "Campo Obligatorio");


         }else {

            QMessageBox mensaje;
            mensaje.setText("Debe asociar Determinaciones al Análisis");
            mensaje.setIcon(QMessageBox::Information);
            mensaje.exec();
        }

     }
     else{

        QDjango::setDebugEnabled(true);
        Analisis *analisis = new Analisis();
        Ana_Det  *anadet   = new Ana_Det();

        if (!ui->id_analisis->text().isEmpty())
        {
            analisis->setId_analisis(ui->id_analisis->text().toInt());
        }
        else
        {
            QSqlQuery query;
            query.exec("select coalesce(max(id_analisis),0) from analisis");
            int max_id;

            while (query.next())
            {
                max_id = query.value(0).toInt();
            }

            analisis->setId_analisis(max_id + 1);

        }

        Departamento  *dept = departamentos.filter(QDjangoWhere("nombre_departamento",QDjangoWhere::Equals,ui->comboBox_departamento->currentText())).at(0);

        analisis->setNombre(ui->nombre_analisis->text().simplified());
        analisis->setTipo_analisis(ui->tipo_analisis->text().simplified());
        analisis->setDepartamento(dept);
        analisis->setDescripcion(ui->descripcion_analisis->toPlainText());
  //    analisis->setTiempo_realizacion(ui->tiempo_realizacion->text().toFloat());
        analisis->setEstado("activo");

        analisis->save();
        cuadroMensaje("","Analisis Registrado","");

        //** Registro Ana_Det **//

        Determinacion  *det;

        for (int i = 0; i < listaAnalisis_det->count(); i++)
        {

            cuadroMensaje("",listaAnalisis_det->at(i));

            QSqlQuery queryDet;
            queryDet.exec("select coalesce(max(id_anadet),0) from anadet");
            int max_idA;

            while (queryDet.next())
            {
              max_idA = queryDet.value(0).toInt();
            }

            max_idA = max_idA + 1;
            anadet->setAnalisis(analisis);
            anadet->setId_anadet(max_idA);
            det = determinaciones.filter(QDjangoWhere("nombre",QDjangoWhere::Equals,listaAnalisis_det->at(i))).at(0);
            anadet->setDeterminacion(det);
            anadet->save();

        }

        this->close();
        delete analisis;
        delete anadet;

     }

}

void Regmod_Analisis_det::on_boton_cancelar_clicked()
{
     this->close();
}


void Regmod_Analisis_det::on_boton_adddet_clicked()
{

    QModelIndexList listaDetermi = ui->listDeterminaciones->selectionModel()->selectedRows();

    QString nombre = ui->listDeterminaciones->model()->data(listaDetermi.at(0)).toString();
    cuadroMensaje("",nombre,"");
    Determinacion *detSeleccionado = determinaciones.filter(QDjangoWhere("nombre", QDjangoWhere::Equals, nombre)).at(0);

    if(!listaAnalisis_det->contains(detSeleccionado->getNombre())){
        listaAnalisis_det->append(detSeleccionado->getNombre());
        ui->listAnalisisDet->addItem(detSeleccionado->getNombre());
    }
    else
    {
        cuadroMensaje("<b><align = 'center'>Error</align></b>","<b><align = 'center'>Ya se encuentra asociada la determinacion: </align></b>"+detSeleccionado->getNombre(),"");
    }

}

void Regmod_Analisis_det::on_boton_add_det_clicked()
{
    Consulta_Determinacion *consDet = new Consulta_Determinacion();
    consDet->exec();
    delete consDet;
}
